feat: Add instrumentation for Lambda Java interface HandleStreamRequest #1036
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem:
All Lambda Java users using HandleStreamRequest experience broken application signal traces. This issue affects all Spring Boot 3 users.
Cause:
AWS Lambda for Java provides two handler interfaces: com.amazonaws.services.lambda.runtime.RequestHandler com.amazonaws.services.lambda.runtime.RequestStreamHandler However, instrumentation for RequestStreamHandler is missing in the OpenTelemetry Java agent.
Fix:
Added instrumentation support for RequestStreamHandler.
Test:
Unit tests pass (./gradlew spotlessCheck assemble instrumentation:test). Manual end-to-end tests pass:
Deployed Lambda functions with Spring Boot 3 and Amazon Serverless Java Container. Enabled application signals, observed broken traces. Disabled application signals and added a private build of the Java layer for Lambda with this change. Verified traces and spans are now correct.
Backward Compatibility:
No risk of breaking existing functionality.
The change only adds instrumentation for RequestStreamHandler without modifying existing behavior for RequestHandler. Existing users not using RequestStreamHandler remain unaffected.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.